package com.czk.rdd.operator.transform

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Author:ChenZhangKun
 * @Date: 2021/12/9 11:01
 */
object Spark04_RDD_Operator_Transform_Par {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)

    val rdd = sc.makeRDD(List(1,2,3,4),2)
    // 可以以分区为单位进行数据转换的操作
    // 但是会将整个分区的数据加载到内存进行引用
    // 如果处理完的数据是不会被释放的，存在对象的引用
    // 在内存较小，数据量较大的情况下会内存溢出
    val mpRDD = rdd.mapPartitions(
      iter => {
        // 打印两次，因为一个分区拿两个数据，一个分区执行一次
        println(">>>>>>>>>")
        iter.map(_ * 2)
      }
    )
    mpRDD.collect().foreach(println)
    sc.stop()
  }
}
